package com.sinaapp.mjfinal.config.mapping;

import org.apache.log4j.Logger;


import com.jfinal.config.Plugins;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory;
import com.jfinal.plugin.activerecord.dialect.AnsiSqlDialect;
import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
import com.jfinal.plugin.activerecord.dialect.OracleDialect;
import com.jfinal.plugin.activerecord.dialect.PostgreSqlDialect;
import com.jfinal.plugin.activerecord.dialect.SqlServerDialect;
import com.jfinal.plugin.c3p0.C3p0Plugin;
import com.sinaapp.mjfinal.constant.ConstantInit;
import com.sinaapp.mjfinal.dto.DataBase;
import com.sinaapp.mjfinal.mvc.model.Population;
import com.sinaapp.mjfinal.tools.ToolDataBase;

/**
 * 数据库映射配置
 * @author binchao
 * 2016年2月28日
 */
public class PlatformMapping extends BaseMapping{

	private static Logger log = Logger.getLogger(PlatformMapping.class);
	
	public PlatformMapping(Plugins plugins){
		log.info("configPlugin 配置Druid数据库连接池连接属性");
		DataBase db = ToolDataBase.getDbInfo();
		String driverClass = db.getDriverClass();
		String jdbcUrl = db.getJdbcUrl();
		String username = db.getUserName();
		String password = db.getPassWord();
		
		C3p0Plugin c3p0Plugin = new C3p0Plugin(jdbcUrl,username, password);
		plugins.add(c3p0Plugin);
		ActiveRecordPlugin arp = new ActiveRecordPlugin(c3p0Plugin);
		plugins.add(arp);
		
		
		//arp.setTransactionLevel(4);//事务隔离级别
		boolean devMode = Boolean.parseBoolean(PropKit.get(ConstantInit.config_devMode));
		arp.setDevMode(devMode); // 设置开发模式
		arp.setShowSql(devMode); // 是否显示SQL
		arp.setContainerFactory(new CaseInsensitiveContainerFactory(true));// 大小写不敏感
		
		log.info("configPlugin 数据库类型判断");
		String db_type = PropKit.get(ConstantInit.db_type_key);
		if(db_type.equals(ConstantInit.db_type_postgresql)){
			log.info("configPlugin 使用数据库类型是 postgresql");
			arp.setDialect(new PostgreSqlDialect());
			
		}else if(db_type.equals(ConstantInit.db_type_mysql)){
			log.info("configPlugin 使用数据库类型是 mysql");
			arp.setDialect(new MysqlDialect());
			
		}else if(db_type.equals(ConstantInit.db_type_oracle)){
			log.info("configPlugin 使用数据库类型是 oracle");
			arp.setDialect(new OracleDialect());
			
		}else if(db_type.equals(ConstantInit.db_type_sqlserver)){
			log.info("configPlugin 使用数据库类型是 sqlserver");
			arp.setDialect(new SqlServerDialect());
			
		}else if(db_type.equals(ConstantInit.db_type_db2)){
			log.info("configPlugin 使用数据库类型是 db2");
			arp.setDialect(new AnsiSqlDialect());
		}

		log.info("configPlugin 添加druidPlugin插件");
		plugins.add(c3p0Plugin); // 多数据源继续添加


		log.info("configPlugin 表手工注册");
		arp.addMapping("population", "id", Population.class); //人口统计信息
		
	

		log.info("configPlugin 注册ActiveRecordPlugin插件");
		plugins.add(arp);
	}
	
}
